iT邦幫忙

2022 iThome 鐵人賽

DAY 3
0
AI & Data

Machine Learning A-Z 學習筆記系列 第 3

[Day03] 拾起武器- Data Preprocessing(02)

  • 分享至 

  • xImage
  •  

Missing Data

上一篇提到數據預處理的章節
本篇繼續從Missing Data(缺失數據)開始
缺失數據是常見的數據集問題之一, 也就是數據集並不完整
可能遺漏了某部分數據, 那遺漏的部分會需要預先處理
本節會用到的資料如下, 可以看到空格的部分就是缺失之處

https://ithelp.ithome.com.tw/upload/images/20220918/20152557au4J5TTZH5.png

處理遺失數據的方法:

  1. 刪除這兩筆數據, 但可能風險很大
  2. 用平均值或其他統計資料代替遺失數據

如何處理遺失數據?

我們使用class sklearn.impute.SimpleImputer 來實現這個目的
可以利用descriptive statistic(描述性的數據) along each column 來填missing values
例如: mean, median, or most frequent
SimpleImputer 已經被拿來取代以前的 sklearn.preprocessing.Imputer

https://ithelp.ithome.com.tw/upload/images/20220918/20152557QB1o6F4rSo.png

Parameters:

  1. missing values: int, float, str, np.nan, None or pandas.NA, default=np.nan
    1. missing values 是什麼型態
  2. strategy: str, default=’mean’
    1. 要用什麼策略來填missing values
    2. mean: 將本column中的值取出平均數來填(只適用於column中都是numeric data)
    3. median: 將本column中的值取出中位數來填(只適用於column中都是numeric data)
    4. most_frequent: 找出本column中出現次數最多的值(可以用strings or numeric data)
    5. constant: 填入fill_value(可以用strings or numeric data)
  3. fill_value: str or numerical value, default=None
    1. 當strategy 為constant時, missing data 會填入這個fill_value 指定的值
  4. verbose: int, default=0
    1. 控制imputer 的詳盡訊息(verbosity)
  5. copy: bool, default=True
    1. if True, create 新的X, if False, 則直接將原本的資料的替換掉
    2. 當下面三種情況發生, 就算copy=false 也會創造資料副本
    • If X is not an array of floating values;
    • If X is encoded as a CSR matrix;
    • If add_indicator=True.
  6. add_indicator: bool, default=False
    1. 用法待確認

上面是創建一個simpleimputer object
接下來可以使用fit() and tranform() 來補足missing data

https://ithelp.ithome.com.tw/upload/images/20220918/20152557upgQ5go9Ma.png
fit() 要帶入目標矩陣,用來init imputer, sample 中的 X[:,1:3] 代表取所有的row數, 取1~2column (i.e purchased 欄位不取)
https://ithelp.ithome.com.tw/upload/images/20220918/20152557jEB7wbDH7Q.png
transform() 帶入相同的參數, 可以轉出imputer 資料, 最後成功替換missing data in X 矩陣

#from sklearn.preprocessing import Imputer >> invlaid now
from sklearn.impute import SimpleImputer
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

dataset = pd.read_csv('Data.csv')
x = dataset.iloc[:, :-1].values
y = dataset.iloc[:, 3].values

imputer = SimpleImputer(missing_values=np.nan, strategy='mean')
# only deal with column 1, 2 (not includes 3)
imputer = imputer.fit(x[:,1:3])
x[:, 1:3] = imputer.transform(x[:, 1:3])
print(x)
print("-----")

最後資料如下圖, 可以看到原本第五筆資料的Salary 欄位跟第七筆資料的Age欄位都是遺失的
現在已經被填入平均age 和 平均salary了
https://ithelp.ithome.com.tw/upload/images/20220918/20152557VJsB7dhM33.png

Reference

https://scikit-learn.org/stable/modules/generated/sklearn.impute.SimpleImputer.html


上一篇
[Day02] 拾起武器 - Data Preprocessing(01)
下一篇
[Day04] 拾起武器- Data Preprocessing(03)
系列文
Machine Learning A-Z 學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言